#pragma once

#include "DrawAPI.h"

class Shape
{
protected:
    Shape(DrawAPI *drawAPI)
    {
        this->m_drawAPI = drawAPI;
    }

public:
    virtual void draw() = 0;

protected:
    DrawAPI *m_drawAPI;
};

class Circle : public Shape
{
public:
    Circle(int x, int y, int radius, DrawAPI *drawAPI) : Shape(drawAPI)
    {
        this->m_x      = x;
        this->m_y      = y;
        this->m_radius = radius;
    }

public:
    void draw()
    {
        m_drawAPI->draw(m_radius, m_x, m_y);
    }

private:
    int m_x, m_y, m_radius;
};

class Retangle : public Shape
{
public:
    Retangle(int x, int y, DrawAPI *drawAPI) : Shape(drawAPI)
    {
        this->m_x = x;
        this->m_y = y;
    }

public:
    void draw()
    {
        m_drawAPI->draw(0, m_x, m_y);
    }

private:
    int m_x, m_y;
};